#include "tds.h"

int it; 
registro *tds;

int crearLista(void){
	tds=crearRegistro();
	if(tds == NULL) return 0;
	
	tds->sig = tds->ant = NULL;
	return 1;
}

int agregarRegistro(enum objeto k){
	registro *L = tds;
	registro *nuevo = crearRegistro();
	if(nuevo == NULL) return 0;
	
	//iendonos al final de la lista
	it++;
	while(L->sig) L = L->sig;
	
	// asignando valores al nuevo nodo
	nuevo->nombre=NULL;
	nuevo->nombre = (char *) malloc(sizeof(char) * (MAXID + 1));
	if(nuevo->nombre == NULL) return 0;

	strcpy(nuevo->nombre,lex);
	nuevo->tipo = k;
	nuevo->sig = NULL;
	
	//uniendo el nodo a la lista
	L->sig = nuevo;
	nuevo->ant = L;
	
	//mostrarLista();
	return 1;
}

registro *crearRegistro(void){
	registro *nuevo = NULL;
	nuevo = (registro *) malloc(sizeof(registro));
	return nuevo;
}

void mostrarLista(void){
	registro *L = tds;
	int cont = 1;
	printf("--- LISTA DE ELEMENTOS ---\n");
	while(L->sig){
		printf("  %d - %s  \ttipo:%d\n", cont++, L->sig->nombre, L->sig->tipo);
		L=L->sig;
	}
	printf("--- FIN DE LA LISTA ---\n");
}

registro *buscarRegistro(char *nombre){
	registro *L = tds;
	
	//iendonos al final de la lista
	while(L->sig) L = L->sig;
	
	while(L->ant){
		//printf("comparando %s con %s\n", L->nombre, nombre);
		if(!strcmp(L->nombre, nombre)) break;
		L = L->ant;
	}
	
	if(L->ant == NULL)return NULL;

	//printf("encontrado:%s --tipo:%d\n\n", L->nombre, L->tipo	);
	return L;
}

void eliminarDesde(int pos){
	registro *L = tds, *temp = NULL;
	int cont = 0;
	
	while(L->sig && cont < pos){
		L=L->sig;
		cont++;
	}
	
	if(!(L->sig)) return;
	
	while(L->sig){
		temp = L->sig;
		L->sig = temp->sig;
		free(temp);
	}
	mostrarLista();
}

void eliminarLista(void){
	registro *L = tds, *temp = NULL;
	while(L){
		temp = L;
		L = temp->sig;
		//printf("liberando %s\n", temp->nombre);
		free(temp);
	}
}

